Zurück in Fortgeschrittene ProgrammentwicklungWeiter in Fortgeschrittene ProgrammentwicklungBreitentraversierung Zusammenfassung ?

Medien wie Festplatten speichern Daten sequentiell. Um einen Baum auf einer Festplatte zu speichern, braucht man deshalb zwei komplementäre Funktionen. Die erste muss den Baum so in eine Sequenz von Elementen verwandeln, dass sie auf die Festplatte geschrieben werden kann. Die zweite muss beim Einlesen der Sequenz wieder den ursprünglichen Baum rekonstruieren oder sogar einen besseren Baum aufbauen. Ein Funktionspaar, das diese Anforderungen erfüllt, ist die Breitentraversierung und ein Einfügealgorithmus, wie er im Thema sortierter Binärbaum beschrieben wird.

Aufgabe Breitentraversierung

Analog zu den beiden Funktionen OErster und ONächster entwickeln wir zwei Funktionen NErster und NNächster (das N steht für Nachbar), die das erste bzw. jeweils nächste Element nach dem Breitentraversierungsverfahren zurückgeben. Da die Algorithmen komplex sind, skizzieren wir nur das Vorgehen und verzichten darauf, Entwurfscode oder gar Programmcode zu formulieren. Die Arbeitsmappe LWoerterbuch.xls schlägt eine Implementation vor.

Bei der Breitentraversierung ist der erste Knoten eines Baumes die Wurzel. Die Prozedur NErster prüft deshalb, ob eine Wurzel existiert und gibt sie gegebenenfalls zurück. Eine Vorschrift zur Bestimmung des Nachbarn leiten wir anhand von Beispielen her. Wir beginnen mit dem einfachsten Fall, dem Nachbarn der Wurzel:

  1. Das erste Bild zeigt vier Bäume, in denen die Wurzel zwei Kinder, nur ein rechtes, nur ein linkes oder gar kein Kind besitzt. Hat die Wurzel ein linkes Kind, so ist dieses ihr Nachbar. Hat sie nur ein rechtes, so ist jenes der Nachbar. Hat sie gar kein Kind, so gibt es auch keinen Nachbarn.

  2. Das zweite Bild zeigt Knoten, die einen rechten Bruder haben. In allen Fällen ist dieser Bruder der gesuchte Nachbar. Ausgehend vom gegebenen Knoten braucht man lediglich dem Rückwärtsverweis zum Vater zu folgen und gelangt von dort aus zum rechten Kind.

  3. Schwieriger sind alle restlichen Fälle, in denen ein Knoten keinen rechten Bruder hat. Das dritte Bild zeigt zwei Fälle. In allen Fällen muss zunächst ein nicht kinderloser Nachbar des Vaters gesucht werden. Besitzt dieser Nachbar ein linkes Kind, so ist dieses der gesuchte Knoten. Anderenfalls ist das rechte Kind der gesuchte Nachbar.

    Die Regel ist rekursiv, da sie voraussetzt, dass man den Nachbarn des Vaters bestimmen kann. Die Rekursion bricht irgendwann ab, da sie sich mit jedem rekursiven Aufruf der Wurzel nähert und der Nachbar der Wurzel ohne rekursiven Aufruf bestimmt werden kann.

    Selbst der Nachbar von Knoten f im rechten Bild lässt sich mit dieser Regel bestimmen. Der Vater von f ist der Knoten d. Über recht verschlungene Wege, in denen die Regeln 1, 2 und 3 mehrfach zur Anwendung kommen, kommt man zum Schluss, dass der erste kinderlose Nachbar von d f selbst ist. Damit ist e der Nachbar von f.

Aufgabe Übungsaufgabe "Wörterbuch Professional"

©abo